"""
闭包
条件：
1. 外部函数中定义了内部函数
2. 外部函数是有返回值
3.返回的值是：内部函数名
闭包的缺点
1.作用域没有那么只管
2.因为变量不会被垃圾回收所以有一定的内存占用问题
闭包作用
1.可以使用同级的作用域
2.读取其他元素的内部变量
3.延长作用域
总结
1.闭包优化了变量，原来需要类对象完成的工作，闭包也可以完成
2.由于闭包引用了外部函数的局部变量，则外部函数的局部变量没有及时释放，消耗内存
3.闭包的好处，使代码变得简洁，便于阅读代码
4.闭包是理解装饰器的基础
"""


def func():
    a = 100

    def inner_func():
        b = 99
        return a, b

    return inner_func
    pass


x = func()
print(x())


# 闭包实现计数器
def generate_count():
    container = [0]

    def add_one():
        container[0] = container[0] + 1
        print("第{}次访问".format(container[0]))

    return add_one


counter = generate_count()
counter()
counter()
counter()
